﻿Public Class ZugangsBuchungFRM

#Region " D e k l a r a t i o n e n "
    Private WithEvents EanEngine As New BarCodeEngine
#End Region

#Region " K o n s t r u k t o r "
    Public Sub New(EanID As Integer)
        '>>> Dieser Aufruf ist für den Designer erforderlich.
        InitializeComponent()
        '>>> Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.
        BildeZugangsRow(EanID)
    End Sub
#End Region

#Region " DGV_SelectionChanged-Ereignis "
    Private Sub DGV_SelectionChanged(sender As Object, e As EventArgs) Handles DGV.SelectionChanged
        MengenVerfallsDatum.SetzeDatum(CType(DGV.SelectedRows(0).Cells("Verfallsdatum").Value, Date))
        MengenVerfallsDatum.SetzeMenge(CInt(DGV.SelectedRows(0).Cells("Menge").Value))
    End Sub
#End Region

#Region " MengenVerfallsDatum_DatumsÄnderung-Ereignis "
    Private Sub MengenVerfallsDatum_DatumsÄnderung(Datum As Date) Handles MengenVerfallsDatum.DatumsÄnderung
        DGV.SelectedRows(0).Cells("Verfallsdatum").Value = Datum.ToShortDateString
    End Sub
#End Region

#Region " MengenVerfallsDatum_MengenÄnderung-Ereignis "
    Private Sub MengenVerfallsDatum_MengenÄnderung(Menge As Integer) Handles MengenVerfallsDatum.MengenÄnderung
        DGV.SelectedRows(0).Cells("Menge").Value = Menge
    End Sub
#End Region

#Region " Private Function: BildeZugangsRow () "
    Private Sub BildeZugangsRow(EanID As Integer)
        Dim tmpDgvRow As New DataGridViewRow
        tmpDgvRow.CreateCells(DGV)
        Dim tmpSQL As String = "SELECT " & TBL.Artikel.TBL & "." & TBL.Artikel.Name &
            ", " & TBL.Artikel.TBL & "." & TBL.Artikel.Id &
            ", " & TBL.EANcodes.TBL & "." & TBL.EANcodes.Code &
            ", " & TBL.Mengeneinheiten.TBL & "." & TBL.Mengeneinheiten.Name &
            " FROM " & TBL.EANcodes.TBL &
            " INNER JOIN " & TBL.Artikel.TBL & " ON " & TBL.Artikel.TBL & "." & TBL.Artikel.Id & " = " & TBL.EANcodes.TBL & "." & TBL.EANcodes.Artikel &
            " INNER JOIN " & TBL.Mengeneinheiten.TBL & " ON " & TBL.Artikel.TBL & "." & TBL.Artikel.ME1 & " = " & TBL.Mengeneinheiten.TBL & "." & TBL.Mengeneinheiten.Id &
            " WHERE " & TBL.EANcodes.TBL & "." & TBL.EANcodes.Id & " = '" & EanID & "'"
        Dim tmpTable As DataTable = DB.BildeDataSet(tmpSQL).Tables(0)
        If tmpTable.Rows.Count = 1 Then
            tmpDgvRow.Cells(0).Value = tmpTable.Rows(0)(0)
            tmpDgvRow.Cells(1).Value = tmpTable.Rows(0)(2)
            tmpDgvRow.Cells(2).Value = 1
            tmpDgvRow.Cells(3).Value = tmpTable.Rows(0)(3)
            tmpDgvRow.Cells(4).Value = Now.ToShortDateString
            tmpDgvRow.Cells(5).Value = tmpTable.Rows(0)(1)
            tmpDgvRow.Cells(6).Value = EanID
            DGV.Rows.Add(tmpDgvRow)
        End If
    End Sub
#End Region

#Region " ZugangsBuchungFRM_KeyPress-Ereignis "
    Private Sub ZugangsBuchungFRM_KeyPress(sender As Object, e As KeyPressEventArgs) Handles Me.KeyPress
        EanEngine.EingehendesKeyDown(e.KeyChar)
    End Sub
#End Region

#Region " EanEngine_EingehenderScan-Ereignis "
    Private Sub EanEngine_EingehenderScan(ScanErgebnis As String) Handles EanEngine.EingehenderScan
        Dim eanID As Integer = DB.EanBekannt(ScanErgebnis)
        If eanID = -1 Then
            '>>> Falls nein entsprechendes Form laden
            Dim step2FRM As New NeuVorhandenFRM
            If step2FRM.ShowDialog = DialogResult.OK Then
                Select Case step2FRM.Rückgabe
                    Case NeuVorhanden.Neu
                        Dim step3FRM As New NeuerArtikelFRM(ScanErgebnis)
                        If step3FRM.ShowDialog <> DialogResult.OK Then
                            Exit Sub
                        End If
                        eanID = step3FRM.EanID
                        step3FRM.Dispose()
                    Case NeuVorhanden.Vorhanden
                        Dim step3FRM As New VorhandenerArtikelFRM(ScanErgebnis)
                        If step3FRM.ShowDialog <> DialogResult.OK Then
                            Exit Sub
                        End If
                        eanID = step3FRM.EanID
                        step3FRM.Dispose()
                End Select
            Else
                Exit Sub
            End If
            step2FRM.Dispose()
        End If
        BildeZugangsRow(eanID)
    End Sub
#End Region

#Region " ButtonLöschen_Click-Ereignis "
    Private Sub ButtonLöschen_Click(sender As Object, e As EventArgs) Handles ButtonLöschen.Click
        DGV.Rows.Remove(DGV.SelectedRows(0))
    End Sub
#End Region

#Region " ButtonBuchen_Click-Ereignis "
    Private Sub ButtonBuchen_Click(sender As Object, e As EventArgs) Handles ButtonBuchen.Click
        '>>> Beginn des eigentlichen Insert Querys für die Chargen Tabelle
        Dim tmpSQL As String = "INSERT INTO " & TBL.Chargen.TBL & " (" & TBL.Chargen.Kennung &
            ", " & TBL.Chargen.EAN &
            ", " & TBL.Chargen.Menge &
            ", " & TBL.Chargen.Verfallsdatum & " ) VALUES "
        '>>> Automatisierte Kennung der Charge
        Dim kennung As String = Now.Ticks.ToString
        '>>> Durchlauf aller Einträge im DGV
        For Each row As DataGridViewRow In DGV.Rows
            '>>> Ergänzung ans oben begonnene Insert Query pro Row
            tmpSQL &= "('" & kennung & "', '" & row.Cells(6).Value & "', '" & row.Cells(2).Value & "', '" & row.Cells(4).Value & "'), "
            '>>> Erstellung und Ausführung des Update Querys für die Bestände an der Artikel Tabelle
            Dim lagerMengenSQL As String = "UPDATE " & TBL.Artikel.TBL & " SET " &
                TBL.Artikel.LagerBestandME1 & " = " & TBL.Artikel.LagerBestandME1 & " + " & row.Cells(2).Value & ", " &
                TBL.Artikel.LagerBestandME2 & " = " & TBL.Artikel.LagerBestandME2 & " + " & row.Cells(2).Value & " * " &
                "(SELECT " & TBL.EANcodes.MeUmrechnungsfaktor & " FROM " & TBL.EANcodes.TBL & " WHERE " & TBL.EANcodes.Id & " = '" & row.Cells(6).Value & "')" &
                " WHERE " & TBL.Artikel.Id & " = '" & row.Cells(5).Value & "'"
            DB.InsertDeleteUpdate(lagerMengenSQL)
        Next
        '>>> Korrektur des Insert Querys und Ausführung
        tmpSQL = tmpSQL.Substring(0, tmpSQL.Length - 2)
        DB.InsertDeleteUpdate(tmpSQL)
        Me.DialogResult = DialogResult.OK
    End Sub
#End Region

End Class